package cn.disicn.service;

import java.util.Date;
import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.google.common.collect.Lists;
import com.jfinal.aop.Before;
import com.jfinal.plugin.activerecord.Page;
import com.jfinal.plugin.activerecord.tx.Tx;

import cn.disicn.common.BizJobsSearch;
import cn.disicn.common.Const;
import cn.disicn.common.Const.taskStatusEnum;
import cn.disicn.common.ServerResponse;
import cn.disicn.controller.SecPublishUserController;
import cn.disicn.model.BizJobs;
import cn.disicn.model.BizJobsAttachment;
import cn.disicn.util.DateTimeUtil;
import cn.disicn.util.IDUtil;
import cn.disicn.util.PageSource;
import cn.disicn.vo.BizJobsVo;

/**
 * @author Luyao
 * @date 2017年11月27日 上午10:46:46
 * @desc:
 */
public class BizJobsService {

	private static final Logger LOGGER = LoggerFactory.getLogger(SecPublishUserController.class);

	private static final BizJobs BIZ_JOBS = new BizJobs().dao();

	/**
	 * @desc:带条件的分页查询任务列表
	 * @date 2017年11月27日 下午2:36:01
	 * @param taskSearch
	 * @return
	 */
	public PageSource<BizJobsVo> getBizJobsList(BizJobsSearch bizJobsSearch, Integer pageNum, Integer pageSize,
			String publishUserId) {
		StringBuilder sql = new StringBuilder(" from biz_jobs where publishUserId = ? ");
		if (bizJobsSearch.getSearchKeyword() != null && !bizJobsSearch.getSearchKeyword().trim().equals("")) {
			LOGGER.info("searchKeyword:" + bizJobsSearch.getSearchKeyword());
			sql.append(" and title like '%" + bizJobsSearch.getSearchKeyword() + "%'");
		}
		/*
		 * if(bizJobsSearch.getAuditStatus() != null &&
		 * bizJobsSearch.getAuditStatus() != -1) { sql.append(""); }
		 */
		if (bizJobsSearch.getTaskState() != null && bizJobsSearch.getTaskState() != -1) {
			LOGGER.info("taskState:" + bizJobsSearch.getTaskState());
			sql.append(" and status = " + bizJobsSearch.getTaskState() + "");
		}
		sql.append(" order by createTime desc");
		Page<BizJobs> page = BIZ_JOBS.paginate(pageNum, pageSize, "select id,title,status,createTime ", sql.toString(),
				publishUserId);
		return new PageSource<BizJobsVo>(page.getPageNumber(), page.getPageSize(), page.getTotalPage(),
				page.getTotalRow(), assembleBizJobsVo(page.getList()));
	}

	/**
	 * @desc:封装任务vo
	 * @date 2017年11月27日 下午5:53:18
	 * @param list
	 * @return
	 */
	private List<BizJobsVo> assembleBizJobsVo(List<BizJobs> list) {
		List<BizJobsVo> bizJobsVos = Lists.newArrayList();
		for (BizJobs bizJobs : list) {
			BizJobsVo bizJobsVo = new BizJobsVo();
			bizJobsVo.setId(bizJobs.getId());
			bizJobsVo.setTitle(bizJobs.getTitle());
			bizJobsVo.setStatus(taskStatusEnum.codeOf(Integer.parseInt(bizJobs.getStatus())).getValue());
			bizJobsVo.setCreateTime(DateTimeUtil.dateToStr(bizJobs.getCreateTime()));

			bizJobsVos.add(bizJobsVo);
		}
		return bizJobsVos;
	}

	/**
	 * @desc: 发布任务
	 * @date 2017年11月28日 下午6:52:03
	 * @param bizJobs
	 * @param attachmentUrls
	 * @return
	 */
	@Before(Tx.class)
	public ServerResponse<String> releaseBizJobs(BizJobs bizJobs, String attachmentUrls, String userId) {
		// 生成任务id，并将任务对象持久化到数据库
		String jobId = IDUtil.getId();
		bizJobs.setId(jobId);
		bizJobs.setStatus(String.valueOf(Const.taskStatusEnum.SIGN_UP.getCode()));
		bizJobs.setCreateTime(new Date());
		bizJobs.setPublishUserId(userId);
		boolean save = bizJobs.save();
		if (save) {
			// 判断附件是否为空，不为空则将url字符串拆分后存在数据库
			if (!StringUtils.isBlank(attachmentUrls) && !attachmentUrls.contains("#")) {
				// 只有一个附件
				saveAttachment(jobId, attachmentUrls);
			} else if (!StringUtils.isBlank(attachmentUrls) && attachmentUrls.contains("#")) {
				// 有多个附件
				String[] str_urls = attachmentUrls.split("#");
				for (String url : str_urls) {
					saveAttachment(jobId, url);
				}
			}
			return ServerResponse.createBySuccessMsg("任务发布成功");
		}
		return ServerResponse.createByErrorMsg("任务发布失败");
	}

	/**
	 * 
	 * @desc:保存附件
	 * @date 2017年11月28日 下午7:20:30
	 * @param jobId
	 * @param url
	 */
	private void saveAttachment(String jobId, String url) {
		BizJobsAttachment bizJobsAttachment = new BizJobsAttachment();
		bizJobsAttachment.setId(IDUtil.getId());
		bizJobsAttachment.setJobid(jobId);
		bizJobsAttachment.setUrl(url);
		// 保存到数据库
		bizJobsAttachment.save();
	}

}
